home *** CD-ROM | disk | FTP | other *** search
/ The Very Best of Atari Inside / The Very Best of Atari Inside 1.iso / sharew / musik / diti_tra.ck / dt_modul.eng / example / hall.asm next >
Encoding:
Assembly Source File  |  1993-07-30  |  1.8 KB  |  63 lines

  1. ; Echo (with multiple reflections)
  2. ;
  3. ; parameter:
  4. ; in braces:    X/Y for X/Y Memory
  5. ;               6/8 for Bitwidth of the address
  6. ;
  7. ; QUELLE: input value  (X-6)
  8. ; ZIEL:   output value (X-6)
  9. ;
  10. ; ESIZE:  size of buffer - 1           max. 16 Bit
  11. ; EZAHL:  number of reflections         max. 12 Bit
  12. ; DELTAB: reflektor table            (Y-8)
  13. ; EPTR:   pointer to buffer input    (Y-6)
  14. ; FBACK:  feedback                   (Y-6)
  15. ;
  16. ; reflektor table (24 Bit DSP-Words):
  17. ;     time  (buffersize - delay)
  18. ;     volume (0 bis 2^23-1, Maximum: amplification factor 1)
  19. ;     ...
  20. ;     ...
  21. ;
  22. ; registers M1,M5  contain $FFFF 
  23. ;
  24. ; changed registers:
  25. ;   X0,X1,Y0,Y1
  26. ;   B
  27. ;   R1,R5
  28. ;   N1
  29.  
  30. echo
  31. ; init registers:
  32.       clr   B   #<DELTAB,R5     ; clear sum,
  33.                                 ; pointer to reflector table
  34.       move  #>ESIZE,M1          ; buffersize
  35.       move  Y:(R5)+,N1          ; 1. Delay-value from table
  36.       move  Y:<EPTR,R1          ; pointer: next buffervalue
  37.  
  38. ; loop: sum up reflektors
  39.       do    #EZAHL,eloop        ; number of reflectors
  40.       move  Y:(R5)+,X0          ; weight of reflectors
  41.       move  X:(R1+N1),X1        ; next value from buffer
  42.       mac   X0,X1,B  Y:(R5)+,N1 ; sum up, and load next delay
  43.                                 
  44. eloop
  45.  
  46. ; do feedback
  47.       move  X:<QUELLE,X1        ; input
  48.       move  Y:<FBACK,Y1         ; feedback
  49.       move  B,Y0                ; sum of reflections
  50.  
  51.       mpy   Y0,Y1,B   B,X:<ZIEL ; weight sum,
  52.                                 ; parallel: Summe to output
  53.       add   X1,B                ; input value plus feedback
  54.       move  B,X:(R1)+           ; store in buffer
  55.       move  R1,Y:<EPTR          ; save bufferpointer
  56.  
  57.       move  #$ffff,M1           ; set M1 back
  58.  
  59.       rts
  60.  
  61.       end
  62.